#include <TFT_eSPI.h>
#include <U8g2_for_TFT_eSPI.h>  // 中文字体支持
#include "my_image.h"
#include <WiFi.h>

TFT_eSPI tft = TFT_eSPI();
U8g2_for_TFT_eSPI u8g2;

#define BLK 5  // 背光控制引脚

// ==== WiFi 配置 ====
const char* ssid = "helloworld";
const char* password = "12345678";
WiFiServer server(8765);
WiFiClient client;

void TFT_Init() {
  tft.init();
  tft.setRotation(2);
  tft.fillScreen(TFT_BLACK);
  pinMode(BLK, OUTPUT);
  digitalWrite(BLK, HIGH);

  u8g2.begin(tft);                         // 初始化 u8g2 与 tft
  u8g2.setFont(u8g2_font_wqy12_t_gb2312);  // 中文字体（GB2312）
  u8g2.setFontMode(1);                     // 透明背景
  u8g2.setForegroundColor(0xFFFF);      // 字体颜色
}

void TFT_Display() {
  tft.pushImage(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, my_image);
}

void showCenteredText(String text) {
  TFT_Display();  // 重贴背景图

  u8g2.setFont(u8g2_font_wqy16_t_gb2312);
  //透明背景
  u8g2.setFontMode(1);                 
  u8g2.setForegroundColor(0xFFFF);     // 设置为白色字体

  int16_t textWidth = u8g2.getUTF8Width(text.c_str());
  int16_t x = (tft.width() - textWidth) / 2;
  int16_t y = (tft.height() - 16) / 2;

  u8g2.drawUTF8(x, y, text.c_str());  
}

void setup() {
  Serial.begin(115200);
  TFT_Init();
  TFT_Display();

  WiFi.begin(ssid, password);
  Serial.print("连接 WiFi 中");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi 已连接,IP 地址为：" + WiFi.localIP().toString());

  server.begin();
  Serial.println("TCP 服务器已启动，监听端口 8765");
}

void loop() {
  if (!client || !client.connected()) {
    client = server.available();
    if (client) {
      Serial.println("客户端已连接");
      client.println("连接成功，发送 SHOW / CLEAR 或中文文本");
    }
  }

  if (client && client.available()) {
    String incoming = client.readStringUntil('\n');
    incoming.trim();
    Serial.print("收到 TCP 数据：");
    Serial.println(incoming);

    if (incoming == "SHOW") {
      TFT_Display();
      client.println("图片已显示");
    } else if (incoming == "CLEAR") {
      TFT_Display();
      client.println("背景图已恢复");
    } else {
      showCenteredText(incoming);
      client.println("已显示文本：" + incoming);
    }
  }

  delay(50);
}